package com.ayf.payment.game.api.service.impl;

import com.ayf.payment.game.api.dto.*;
import com.ayf.payment.game.api.dto.criteria.TemplateCriteria;
import com.ayf.payment.game.api.dto.getaway.GameRechargeGetWayDTO;
import com.ayf.payment.game.api.service.PartitionService;
import com.ayf.payment.game.api.type.YesAndNo;
import com.ayf.payment.game.api.utils.TemplateFormatUtil;
import org.springframework.stereotype.Service;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

/**
 * @author wwl
 * @description:
 * @date 2020/5/28 13:06
 */
@Service
public class PartitionServiceImpl implements PartitionService {


    public List<GameRechargeGetWayDTO> rechargeAllGetWayByManual(List<ReissueRecordD> rrList, ReissueAllTaskDTO reissueAllTask, PartitionDTO partition, TemplateCriteria template, boolean typeTwo, boolean typeThree) {
        List<GameRechargeGetWayDTO> rechargelist = new ArrayList();
        Iterator var8 = rrList.iterator();

        while(var8.hasNext()) {
            ReissueRecordD rr = (ReissueRecordD)var8.next();
            GameRechargeGetWayDTO gameRechargeGetWayDTO = new GameRechargeGetWayDTO();
            gameRechargeGetWayDTO.setAmount(rr.getRechargeAmount().intValue());
            gameRechargeGetWayDTO.setChannelName(rr.getChannelName());
            gameRechargeGetWayDTO.setPlayName(rr.getRechargeNumber());
            gameRechargeGetWayDTO.setInstallPath(partition.getInstallPath());
            gameRechargeGetWayDTO.setGameCurrencyName(template.getGameCurrencyName());
            gameRechargeGetWayDTO.setCustomizeStatus(template.getCustomizeStatus());
            gameRechargeGetWayDTO.setEquipmentStatus(template.getEquipmentStatus());
            gameRechargeGetWayDTO.setDonationRatio(template.getSubscriptionRatio());
            gameRechargeGetWayDTO.setOrderNo(rr.getSerialNumber());
            gameRechargeGetWayDTO.setPartitionName(partition.getPartitionName());
            gameRechargeGetWayDTO.setRechargeType("整区补发");

            if(rr.getManualType().indexOf("1") > -1){
                template.setEscitationList(new ArrayList<>());
                template.setIsRepaidGift(YesAndNo.NO);
            }
                TemplateFormatUtil.getTotalAmount(template, rr.getCode(), gameRechargeGetWayDTO);
            if (!typeTwo) {
                gameRechargeGetWayDTO.setAdditionalOfMoney(gameRechargeGetWayDTO.getAmountOfMoney() * reissueAllTask.getReissueQuota() / 100);
                gameRechargeGetWayDTO.setReissueOfMoney(gameRechargeGetWayDTO.getAmountOfMoney() * reissueAllTask.getReissueQuota() / 100);
            } else {
                gameRechargeGetWayDTO.setAdditionalOfMoney(gameRechargeGetWayDTO.getAmount() * reissueAllTask.getReissueQuota() / 10);
                gameRechargeGetWayDTO.setReissueOfMoney(gameRechargeGetWayDTO.getAmount() * reissueAllTask.getReissueQuota() / 10);
            }
            gameRechargeGetWayDTO.setAmountOfMoney(gameRechargeGetWayDTO.getAmountOfMoney() + gameRechargeGetWayDTO.getReissueOfMoney());
            gameRechargeGetWayDTO.setGiveReissueMoney(TemplateFormatUtil.formatMoney(gameRechargeGetWayDTO.getReissueOfMoney()));
            gameRechargeGetWayDTO.setGiveTotal(new BigDecimal(gameRechargeGetWayDTO.getAmountOfMoney()).multiply(new BigDecimal(gameRechargeGetWayDTO.getDonationRatio())).divide(new BigDecimal(10)).setScale( 0, BigDecimal.ROUND_DOWN ) + "");
            if(typeThree){
                TemplateFormatUtil.formatTemplateReissueAll(template, gameRechargeGetWayDTO.getAmountOfMoney(), rr.getRechargeAmount().intValue(), rr.getCode(), gameRechargeGetWayDTO, 0, typeTwo);
            }else {
                TemplateFormatUtil.formatTemplateReissueAll(template, gameRechargeGetWayDTO.getAmountOfMoney(), rr.getRechargeAmount().intValue(), rr.getCode(), gameRechargeGetWayDTO, reissueAllTask.getReissueQuota(), typeTwo);
            }
                if (rr.getManualType().indexOf("2") > -1) {
                    gameRechargeGetWayDTO.setAdditionalList(new ArrayList());
                }
                if (rr.getManualType().indexOf("3") > -1) {
                    gameRechargeGetWayDTO.setIntegralList(new ArrayList());
                }

                if (rr.getManualType().indexOf("4") > -1) {
                    gameRechargeGetWayDTO.setEquipmentList(new ArrayList());
                }
            gameRechargeGetWayDTO.setPortNum(partition.getPortNum());
            gameRechargeGetWayDTO.setServerIp(partition.getServerIp());
            rechargelist.add(gameRechargeGetWayDTO);
        }

        return rechargelist;
    }

    private void autoTypeFormat(boolean typeThree, String GameCurrencyName, GameRechargeGetWayDTO gameRechargeGetWayDTO, int reissueQuota) {
        if (typeThree) {
            gameRechargeGetWayDTO.setAdditionalOfMoney(gameRechargeGetWayDTO.getAmountOfMoney() * reissueQuota / 100);
        } else {
            gameRechargeGetWayDTO.setAdditionalOfMoney(0);
        }

    }

    public List<GameRechargeGetWayDTO> rechargeAllGetWay(List<ReissueRecordD> rrList, ReissueAllTaskDTO reissueAllTask, PartitionDTO partition, TemplateCriteria template, boolean typeOne, boolean typeTwo, boolean typeThree) {
        List<GameRechargeGetWayDTO> rechargelist = new ArrayList();
        Iterator var9 = rrList.iterator();

        while(var9.hasNext()) {
            ReissueRecordD rr = (ReissueRecordD)var9.next();
            GameRechargeGetWayDTO gameRechargeGetWayDTO = new GameRechargeGetWayDTO();
            gameRechargeGetWayDTO.setAmount(rr.getRechargeAmount().intValue());
            gameRechargeGetWayDTO.setChannelName(rr.getChannelName());
            gameRechargeGetWayDTO.setPlayName(rr.getRechargeNumber());
            gameRechargeGetWayDTO.setInstallPath(partition.getInstallPath());
            gameRechargeGetWayDTO.setCustomizeStatus(template.getCustomizeStatus());
            gameRechargeGetWayDTO.setGameCurrencyName(template.getGameCurrencyName());
            gameRechargeGetWayDTO.setEquipmentStatus(template.getEquipmentStatus());
            gameRechargeGetWayDTO.setDonationRatio(template.getSubscriptionRatio());
            gameRechargeGetWayDTO.setOrderNo(rr.getSerialNumber());
            gameRechargeGetWayDTO.setPartitionName(partition.getPartitionName());
            gameRechargeGetWayDTO.setRechargeType("整区补发");
            TemplateFormatUtil.getTotalAmount(template, rr.getCode(), gameRechargeGetWayDTO);
            if (!typeTwo) {
                gameRechargeGetWayDTO.setReissueOfMoney(gameRechargeGetWayDTO.getAmountOfMoney() * reissueAllTask.getReissueQuota() / 100);
                this.autoTypeFormat(typeThree, template.getGameCurrencyName(), gameRechargeGetWayDTO, reissueAllTask.getReissueQuota());
            } else {
                this.autoTypeFormat(typeThree, template.getGameCurrencyName(), gameRechargeGetWayDTO, reissueAllTask.getReissueQuota());
                gameRechargeGetWayDTO.setReissueOfMoney(gameRechargeGetWayDTO.getAmount() * reissueAllTask.getReissueQuota() / 10);
            }
            gameRechargeGetWayDTO.setAmountOfMoney(gameRechargeGetWayDTO.getAmountOfMoney() + gameRechargeGetWayDTO.getReissueOfMoney());
            gameRechargeGetWayDTO.setGiveReissueMoney(TemplateFormatUtil.formatMoney(gameRechargeGetWayDTO.getReissueOfMoney()));
            gameRechargeGetWayDTO.setGiveTotal(new BigDecimal(gameRechargeGetWayDTO.getAmountOfMoney()).multiply(new BigDecimal(gameRechargeGetWayDTO.getDonationRatio())).divide(new BigDecimal(10)).setScale( 0, BigDecimal.ROUND_DOWN ) + "");
            if(typeThree){
                TemplateFormatUtil.formatTemplateReissueAll(template, gameRechargeGetWayDTO.getAmountOfMoney(), rr.getRechargeAmount().intValue(), rr.getCode(), gameRechargeGetWayDTO, 0, typeTwo);
            }else{
                TemplateFormatUtil.formatTemplateReissueAll(template, gameRechargeGetWayDTO.getAmountOfMoney(), rr.getRechargeAmount().intValue(), rr.getCode(), gameRechargeGetWayDTO, reissueAllTask.getReissueQuota(), typeTwo);
            }
            gameRechargeGetWayDTO.setPortNum(partition.getPortNum());
            gameRechargeGetWayDTO.setServerIp(partition.getServerIp());
            rechargelist.add(gameRechargeGetWayDTO);
        }
        return rechargelist;
    }

    public GameRechargeGetWayDTO rechargeGetWay(ReissueRecordD reissueRecord, PartitionDTO partition, TemplateCriteria template) {
        GameRechargeGetWayDTO gameRechargeGetWayDTO = new GameRechargeGetWayDTO();
        gameRechargeGetWayDTO.setAmount(reissueRecord.getRechargeAmount().intValue());
        gameRechargeGetWayDTO.setChannelName(reissueRecord.getChannelName());
        gameRechargeGetWayDTO.setPlayName(reissueRecord.getRechargeNumber());
        gameRechargeGetWayDTO.setInstallPath(partition.getInstallPath());
        gameRechargeGetWayDTO.setOrderNo(reissueRecord.getSerialNumber());
        gameRechargeGetWayDTO.setCustomizeStatus(template.getCustomizeStatus());
        gameRechargeGetWayDTO.setPartitionName(partition.getPartitionName());
        gameRechargeGetWayDTO.setRechargeType("手动补发");
        gameRechargeGetWayDTO.setDonationRatio(template.getSubscriptionRatio());
        gameRechargeGetWayDTO.setGameCurrencyName(template.getGameCurrencyName());
        if (reissueRecord.getManualType().indexOf("1") > -1) {
            gameRechargeGetWayDTO.setAmountOfMoney(gameRechargeGetWayDTO.getAmount() * 10);
            gameRechargeGetWayDTO.setReissueOfMoney(gameRechargeGetWayDTO.getAmountOfMoney() * reissueRecord.getReissueQuota() / 100);
        } else {
            TemplateFormatUtil.getTotalAmount(template, reissueRecord.getCode(), gameRechargeGetWayDTO);
            gameRechargeGetWayDTO.setReissueOfMoney(gameRechargeGetWayDTO.getAmountOfMoney() * reissueRecord.getReissueQuota() / 100);
        }
        gameRechargeGetWayDTO.setAmountOfMoney(gameRechargeGetWayDTO.getAmountOfMoney() + gameRechargeGetWayDTO.getReissueOfMoney());
        gameRechargeGetWayDTO.setGiveReissueMoney(TemplateFormatUtil.formatMoney(gameRechargeGetWayDTO.getReissueOfMoney()));
        gameRechargeGetWayDTO.setGiveTotal(new BigDecimal(gameRechargeGetWayDTO.getAmountOfMoney()).multiply(new BigDecimal(gameRechargeGetWayDTO.getDonationRatio())).divide(new BigDecimal(10)).setScale( 0, BigDecimal.ROUND_DOWN ) + "");
        TemplateFormatUtil.formatTemplate(template, reissueRecord.getRechargeAmount().intValue(), reissueRecord.getCode(), gameRechargeGetWayDTO);
        if (reissueRecord.getManualType().indexOf("2") > -1) {
            gameRechargeGetWayDTO.setAdditionalList(new ArrayList());
        }

        if (reissueRecord.getManualType().indexOf("3") > -1) {
            gameRechargeGetWayDTO.setIntegralList(new ArrayList());
        }

        if (reissueRecord.getManualType().indexOf("4") > -1) {
            gameRechargeGetWayDTO.setEquipmentList(new ArrayList());
        }

        gameRechargeGetWayDTO.setPortNum(partition.getPortNum());
        gameRechargeGetWayDTO.setServerIp(partition.getServerIp());
        return gameRechargeGetWayDTO;
    }

    public GameRechargeGetWayDTO orderToGetWay(OrderDTO order, PartitionChangeDTO partition, TemplateCriteria template) {
        GameRechargeGetWayDTO gameRechargeGetWayDTO = new GameRechargeGetWayDTO();
        gameRechargeGetWayDTO.setAmount(order.getAmount().intValue());
        gameRechargeGetWayDTO.setOrderNo(order.getMerchantOrderNo());
        gameRechargeGetWayDTO.setPartitionName(partition.getPartitionName());
        gameRechargeGetWayDTO.setDonationRatio(template.getSubscriptionRatio());
        gameRechargeGetWayDTO.setCustomizeStatus(template.getCustomizeStatus());
        gameRechargeGetWayDTO.setRechargeType("充值");
        TemplateFormatUtil.getTotalAmount(template, order.getPayCode(), gameRechargeGetWayDTO);
        gameRechargeGetWayDTO.setGiveTotal(new BigDecimal(gameRechargeGetWayDTO.getAmountOfMoney()).multiply(new BigDecimal(gameRechargeGetWayDTO.getDonationRatio())).divide(new BigDecimal(10)).setScale( 0, BigDecimal.ROUND_DOWN ) + "");
        gameRechargeGetWayDTO.setChannelName(order.getPayTypeName());
        gameRechargeGetWayDTO.setInstallPath(partition.getInstallPath());
        gameRechargeGetWayDTO.setEquipmentStatus(template.getEquipmentStatus());
        gameRechargeGetWayDTO.setPlayName(order.getRechargeNumber());
        gameRechargeGetWayDTO.setServerIp(partition.getServerIp());
        gameRechargeGetWayDTO.setPortNum(partition.getPortNum());
        gameRechargeGetWayDTO.setGameCurrencyName(template.getGameCurrencyName());
        TemplateFormatUtil.formatTemplate(template, order.getAmount().intValue(), order.getPayCode(), gameRechargeGetWayDTO);
        return gameRechargeGetWayDTO;
    }
}
